// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init()
// 获取默认环境的数据库的引用
const db = cloud.database()

// 获取 歌单列表 集合
const playlistCollection = db.collection('playlist')

const axios = require('axios')
const URL = 'https://apis.imooc.com/personalized?icode=8A57B2DAC6712EA6'

// 云函数从数据库获取数据，每次最大条数为100条
const MAX_LIMIT = 100

// 云函数入口函数
exports.main = async (event, context) => {
  // 从云数据库获取歌单信息
  // 获取 歌单列表 集合里的所有数据，云函数最多一次获取 100条数据，小程序端最多一次20条
  // const list = await playlistCollection.get() 
  // 获取集合的总数据条数
  const countResult = await playlistCollection.count()
  const total = countResult.total
  // 需要获取的次数
  const batchTimes = Math.ceil(total / MAX_LIMIT)
  // 从云数据库获取歌单信息
  let plist = []
  for (let i = 0; i < batchTimes; i++) {
    let listResult = await playlistCollection.skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
    let list = listResult.data
    plist = plist.concat(list)
  }
  console.log(plist)
  
  // 从第三方服务器获取歌单信息
  const { data } = await axios.get(URL)
  if(data.code >= 1000) {
    console.log(data.msg)
    return 0
  }
  // console.log(data)
  // 第三方服务器获取到的歌单数据
  const playlist = data.result

  // 不重复的数据放在 newData 数组中
  const newData = []
  for (let i = 0, len1 = playlist.length; i < len1; i++) {
    // 是否重复标志为 true 为不重复  false 为重复
    let flag = true
    for (let j = 0, len2 = plist.length; j < len2; j++) {
      if (playlist[i].id == plist[j].id) {
        flag = false
        break
      }
    }
    if (flag) {
      newData.push(playlist[i])
    }
  }
  // 如果newData为空，则不插入数据库
  if (newData.length == 0) return

  // 将歌单数据批量插入数据库
  await playlistCollection.add({
    data: newData
  }).then((res) => {
    console.log('插入成功')
    return newData.length
  }).catch((err) => {
    console.error('插入失败:' + err)
  })

}